package com.tbit.main.dao.core;

import com.tbit.main.pojo.MachineAbnormal;
import com.tbit.main.pojo.OrderJob;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * 异常车辆
 *
 * @author Leon
 * 2019年11月16日 下午2:51:12
 */
public interface MachineAbnormalDao {

    /**
     * 根据设备id查询
     *
     * @param machineId
     * @return
     */
    List<MachineAbnormal> getByMachineId(Integer machineId);

    /**
     * 查询所有
     *
     * @return
     */
    List<MachineAbnormal> getAll();

    /**
     * 根据设备id和类型查询
     *
     * @param params
     * @return
     */
    MachineAbnormal getByMachineIdAndType(Map<String, Object> params);

    /**
     * 根据设备id和类型查询
     *
     * @param params
     * @return
     */
    List<Integer> getByMachineIdsIdAndType(Map<String, Object> params);

    /**
     * 添加
     *
     * @param machineAbnormal
     */
    void insert(MachineAbnormal machineAbnormal);

    /**
     * 删除
     *
     * @param params
     */
    void del(Map<String, Object> params);

    /**
     * 批量删除
     *
     * @param params
     */
    void deleteBatch(Map<String, Object> params);

    /**
     * 根据区域删除
     *
     * @param params
     */
    void delAccountId(Map<String, Object> params);

    /**
     * 根据车辆和类型分组
     *
     * @param params
     * @return
     */
    List<MachineAbnormal> groupByMachineIdAndType(Map<String, Object> params);

    List<MachineAbnormal> groupByMachineIdAndListType(Map<String, Object> params);

    /**
     * 根据车辆和类型分组
     *
     * @param params
     * @return
     */
    List<MachineAbnormal> groupMachineIdAndType(Map<String, Object> params);

    List<MachineAbnormal> groupMachineIdAndListType(Map<String, Object> params);

    List<MachineAbnormal> groupByMachineIdRegionIdAndType2(Map<String, Object> params);

    /**
     * 根据车辆和类型分组
     *
     * @param params
     * @return
     */
    List<MachineAbnormal> groupByMachineIdAndRegionId(Map<String, Object> params);

    /**
     * 根据车辆和类型
     *
     * @param params
     * @return
     */
    List<MachineAbnormal> groupMachineIdAndRegionId(Map<String, Object> params);

    /**
     * 根据类型查询
     *
     * @param
     * @return
     */
    List<MachineAbnormal> getAccountIdType(Map<String, Object> params);

    /**
     * 根据类型查询
     *
     * @param params
     * @return
     */
    List<MachineAbnormal> getByType(Map<String, Object> params);

    /**
     * 定时任务根据区域id和时间查询
     *
     * @param orderJobList
     * @return
     */
    List<MachineAbnormal> getOrderJob(List<OrderJob> orderJobList);

    /**
     * 根据运营区域查询异常车辆
     *
     * @param accountId
     * @return
     */
    List<MachineAbnormal> getByAccountId(Integer accountId);

    /**
     * 根据运营区域查询异常车辆
     *
     * @param accountIds
     * @return
     */
    List<MachineAbnormal> getByAccountIds(String accountIds);

    /**
     * 获取运营区域内的异常车辆数
     *
     * @return
     */
    List<Map<String, Object>> getGroupByAccountId();

    /**
     * 根据运营区域内的异常车辆数
     *
     * @param accountId
     * @return
     */
    Integer getByAccountIdCount(Integer accountId);

    /**
     * 批量添加
     *
     * @param
     */
    void insertBatch(@Param("machineId") List<Integer> machineId, @Param("abnormalType") Integer abnormalType, @Param("dateTime") String dateTime);

    /**
     * 根据异常类型查询
     *
     * @param abnormalType
     * @return
     */
    List<Integer> getByAbnormalType(Integer abnormalType);

    /**
     * 查看区域异常类型总数
     *
     * @return
     */
    List<Map<String, Object>> getAccountIdAndType();

    /**
     * 根据车辆和类型总数
     *
     * @param map
     * @return
     */
    Integer getAccountIdTypeCount(Map<String, Object> map);

    /**
     * 根据车辆批量查询
     *
     * @param machineIds
     * @return
     */
    List<MachineAbnormal> getByMachineIds(@Param("machineIds") String machineIds);

}
